﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>

using namespace std;


//字符串压缩
//https://leetcode.cn/problems/compress-string-lcci/
// #include<stdlib.h>

// char* compressString(char* S)
// {
    // int strnum = strlen(S);
    // if(strnum == 0)
    // {
        // return S;
    // }
    // int num = 0;
    // if (strnum < 100)//计算开辟的空间大小
    // {
        // num = strnum * 2;
    // }
    // else
    // {
        // num = strnum;
    // }
    // char* str = (char*)calloc(num, sizeof(char));
    // num -= 2;//新字符数组空出一个0作为/0
    // for (int i = strnum - 1; i >= 0;)//空出一个0方便统计长度
    // {
        // int k = i;
        // while (k >= 0 && S[i] == S[k])
        // {
            // --k;
        // }
        // int t = k;
        // k = i - k;
        // while (k > 0 && num > 0)//放置数字且空间满了直接跳出
        // {
            // str[num--] = (k % 10) + '0';//数字加字符0转化为数字字符
            // k /= 10;
        // }
        // if (num < 0)//空间占满了返回S
            // {
                // return S;
            // }
        // str[num--] = S[i];//放置字母
        // i = t;
    // }
    // str = str + num+1;
    // return strlen(str) < strnum ? str : S;
// }






//配对交换
//https://leetcode.cn/problems/exchange-lcci/
// int exchangeBits(int num){
    // return ((num & 2863311530)>>1) | ((num & 1431655765)<<1);
// }

//先用按位与 & 与二进制偶数位全为1的和二进制奇数位全为1按位与取出该数的奇数位与偶数位
//然后使用为运算符>>和<<将偶数位推向奇数位，奇数位推向偶数位，这样就实现了交换
//最后使用按位或截取交换后的奇数和偶数二进制位合并成为原数